Skip to content

2796. 重复字符串

2796. 重复字符串

ts
String.prototype.replicate = function (times) {
  return Array.from({ length: times }, () => this).join('')
}

ES6 之前的常见实现

String.prototype.repeat 是 ES6 引入的原生方法。在此之前,重复字符串的常见写法正是创建数组再 join。

Array.from({ length: times }, () => this) 创建了一个长度为 times 的数组,每个元素都是原字符串的引用。然后用 join('') 拼接——因为 join 用空字符串作为分隔符,所以结果是原字符串重复 times 次。

为什么用 join 而不是循环拼接

在早期的 JavaScript 引擎中,字符串是不可变的,每次 += 都会创建新字符串。对于大 times,循环拼接会导致 O(N²) 的复制开销。join 的实现(C 层)可以一次性分配目标内存再填充,避免了中间字符串对象的反复创建。

现代引擎对 += 的优化很激进(V8 的字符串 rope 等),但对于大数据量,join 仍然是更安全的选择。

边界

  • times = 0 → 返回空字符串(Array.from({ length: 0 }) 返回 [][].join('') 返回 ""
  • times < 0 → 原生 repeat 会抛 RangeError,这个实现返回空字符串
  • times 不是整数 → Array.from 的 length 会被截断为整数